package thread;

public class SyncDemo2 {
    public static void main(String[] args) {

        Shop shop=new Shop();
        //Shop shop1=new Shop();
        //Shop shop2=new Shop();
        Thread t1=new Thread("wkj"){
            @Override
            public void run() {
              shop.buy();
              //shop1.buy();
            }
        };
        Thread t2=new Thread("fcq"){
            @Override
            public void run() {
                shop.buy();
                //shop2.buy();
            }
        };
        t1.start();
        t2.start();

    }
}

class Shop{
    /*
      在方法上使用synchronized时，同步监视器只能是this.
     */
    //  public synchronized void buy(){
    public void buy(){
        try {
            Thread t=Thread.currentThread();//获取运行buy方法的线程

            System.out.println(t.getName()+"：正在挑衣服...");
            Thread.sleep(5000);

            synchronized (this) {
            //synchronized ("hello"){ //用字面量对象能有效排队，但当不需要抢的情况下仍要排队
            //synchronized (new Object()){ //多个线程看到的不是同一个对象
                System.out.println(t.getName() + "：正在试衣服...");
                Thread.sleep(5000);
            }
            System.out.println(t.getName()+"：结账离开...");
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }



}